<?php defined('SYSPATH') or die('No direct script access.');

class Model_Auth {

	protected static $_log = NULL;
	
	// Проверка логина и пароля для терминала
	public static function check_user($login, $password)
	{
		$auth = Kohana::config('auth');
		
		// Прогоняем базу пользователей в цикле и проверяем логин и пароль
		foreach($auth['users'] as $user => $params)
		{
			if($user == $login AND $params['password'] == sha1($password))
			{

				$user = new Model_User();
				$user->role = array('id' => $params['role'], 'params' => $auth['roles'][$params['role']]);
				$user->login = $login;
				
				if(isset($params['access_id']))
				{
					$user->access_id = $params['access_id'];
				} 
				elseif(isset($auth['roles'][$params['role']]['access_id']) OR $auth['roles'][$params['role']]['access_id'] === NULL)
				{
					$user->access_id = $auth['roles'][$params['role']]['access_id'];
				}
				
				Session::instance()->set('user', $user);
				Session::instance()->set('logged_in', 1);
					
				// Если сопрадают, пишем в лог когда авторизация прошла
				self::log_autorization(TRUE);
				return TRUE;
			}
		}
		
		// Если не сопрадают, пишем в лог когда авторизация не прошла
		self::log_autorization(FALSE);
		return FALSE;
	}

	// Проверка логина и пароля для терминала
	public static function check_terminal($login, $password)
	{
		$terminal = Kohana::config('auth.terminal');
		
		if($terminal['login'] == $login AND $terminal['password'] == $password)
		{
			// Если сопрадают, пишем в лог когда авторизация прошла
			self::log_autorization(TRUE);
			return TRUE;
		}
		else
		{
			// Если не сопрадают, пишем в лог когда авторизация не прошла
			self::log_autorization(FALSE);
			return FALSE;
		}
	}
	
	protected static function log()
	{
		if(self::$_log === NULL)
		{
			// Инициализируем лог и папку для него auth в апликейшн
			self::$_log = Kohana_Log::instance();
			self::$_log->attach(new Kohana_Log_File(APPPATH.'auth'));
		}
		
		return self::$_log;
	}
	
	// Логирование событий
	protected static function log_autorization($status)
	{
		if($status === TRUE)
		{
			self::log()->add('Login success', '(:ip) - ":user" - ":pass"', array(
				':ip' => $_SERVER['REMOTE_ADDR'],
				':user' => $_SERVER['PHP_AUTH_USER'],
				':pass'	=> $_SERVER['PHP_AUTH_PW']
			));
		} else {
			self::log()->add('Login failed', '(:ip) - ":user" - ":pass"', array(
				':ip' => $_SERVER['REMOTE_ADDR'],
				':user' => $_SERVER['PHP_AUTH_USER'],
				':pass'	=> $_SERVER['PHP_AUTH_PW']
			));
		}
	}
	
	public static function log_operation($name, $message)
	{
		self::log()->add($name, $message);
	}

}